La fonction creerCell
permet de créer une cellule de traduction avec une liste de lignes, une ligne particulière (celle qui sert de base) et la langue (base) dans laquelle s'effectue la traduction.
creerCell :: [Tradln] -> Tradln -> Lang -> Traduction
creerCell lst lin lang = Traduction (lnCode lin) lang lst_en lst_fr (lnDom1 lin) (lnDom2 lin) (lnDom3 lin)
where
lst_en = case lang of
En -> [TradLaTeXEn (lnTradEn lin)]
_ -> map TradLaTeXEn (nv (nub (map lnTradEn lst_ins)))
lst_fr = case lang of
Fr -> [TradLaTeXFr (lnTradFr lin)]
_ -> map TradLaTeXFr (nv (nub (map lnTradFr lst_ins)))
nv lst = filter (\\a -> not (null a)) lst
lst_ins = filtreCode lst (lnCode lin)
Cette fonction retourne une traduction créée avec le constructeur par défaut (ligne 2). La traduction ainsi créée contient le même code de regroupement que la ligne originelle (lncode lin), la langue lang, la liste de mot anglais lsten, la liste de mots français lstfr, et enfin les domaines (lndom1 lin) (lndom2 lin) (lndom_3 lin)
Les fonctions lst_en
et lst_fr
sont définis juste après le where
et permettent la création des listes de mots.
Les fonctions nv
et lst_ins
servent réciproquement à éliminer les éléments vide d'une liste et à filtrer les éléments ayant le même code de regroupement.
La fonction lst_en
n'a pas le même contenu suivant la langue :
En anglais la liste contient seulement le mot de la ligne de référence
En français la liste contient tous les mots anglais de la liste de ligne ayant le même code de regroupement. On commence par créer une liste des mots ayant le même code map ln_trad_en
lst_ins
puis on supprime les doublons avec la fonction nub, à éliminer les éléments vides avec nv
et enfin on crée une liste de traduction LaTeX en "mappant" le tout avec le constructeur TradLaTeXEn
.
Même chose pour la liste des mots français.
La fonction listeDomaine
permet de créer une liste de traductions (cellules) appartenant au même domaine.
listeDomaine :: [Tradln] -> String -> Lang -> Int -> [Traduction]
listeDomaine lst dom lang ver = case lang of
En -> map (\a -> creerCell lst a En) (nubBy (on (==) lnTradEn) (triEn (filtreDom lst_ins dom)))
Fr -> map (\a -> creerCell lst a Fr) (nubBy (on (==) lnTradFr) (triFr (filtreDom lst_ins dom)))
where lst_ins = filtreVer ver (filtreOk lst)
La liste lst_ins
contient toutes les lignes ayant le numéro de version requis et devant être intégrées. En fonction de la langue (case), les cellules sont créées de façon appropriée:
Pour l'Anglais:
On filtre lst_ins
par domaine avec filtre_dom
.
On trie dans l'ordre des mots Anglais avec tri_en
.
On supprime les mots anglais en doublon avec nubBy
.
On "mappe" la liste obtenue en appliquant la fonction \a -> creer_cell lst_ins a En
afin de créer une liste de traductions (cellules) avec cette-ci.
Pour le Français, même procédure mais avec les champs associés.